package org.ciallo.simplemusicplayer.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.ciallo.simplemusicplayer.R;

import java.util.List;

/**
 * @author Jukomu
 * @Description: 播放器更多操作对话框中选项列表的适配器。
 * @Package: org.ciallo.simplemusicplayer.adapter
 * @Project: SimpleMusicPlayer
 * @name: SongDetailOptionsAdapter
 * @Date: 2025/5/29-04:50
 * @Filename: SongDetailOptionsAdapter
 */
public class SongDetailOptionsAdapter extends RecyclerView.Adapter<SongDetailOptionsAdapter.OptionViewHolder> {

    public final List<OptionItem> optionItems;
    private final OnOptionItemClickListener listener;
    private Context context; // 用于加载drawable

    /**
     * 代表一个操作选项的数据类。
     */
    public static class OptionItem {
        public final int id; // 用于区分操作的唯一ID
        public String text;
        public int iconResId; // 左侧图标资源ID (可选)
        public final int actionIconResId; // 右侧图标资源ID (例如箭头)

        public OptionItem(int id, String text, int iconResId, int actionIconResId) {
            this.id = id;
            this.text = text;
            this.iconResId = iconResId; // 0 表示没有图标
            this.actionIconResId = actionIconResId; // 0 表示没有图标
        }
        // 如果文本需要动态更新 (例如 "收藏" -> "取消收藏")
        public void setText(String text) {
            this.text = text;
        }
    }

    /**
     * 列表项点击监听器接口。
     */
    public interface OnOptionItemClickListener {
        void onOptionItemClick(OptionItem item);
    }

    /**
     * 构造函数。
     * @param optionItems 要显示的选项列表。
     * @param listener    点击事件监听器。
     */
    public SongDetailOptionsAdapter(List<OptionItem> optionItems, OnOptionItemClickListener listener) {
        this.optionItems = optionItems;
        this.listener = listener;
    }

    @NonNull
    @Override
    public OptionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        this.context = parent.getContext();
        View view = LayoutInflater.from(context).inflate(R.layout.item_song_detail_option, parent, false);
        return new OptionViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull OptionViewHolder holder, int position) {
        OptionItem item = optionItems.get(position);
        holder.bind(item, listener, context);
    }

    @Override
    public int getItemCount() {
        return optionItems.size();
    }

    /**
     * ViewHolder 类。
     */
    static class OptionViewHolder extends RecyclerView.ViewHolder {
        ImageView ivIcon;          // 左侧图标
        TextView tvText;           // 选项文本
        ImageView ivActionIcon;    // 右侧操作图标

        OptionViewHolder(View itemView) {
            super(itemView);
            ivIcon = itemView.findViewById(R.id.imageView_option_icon);
            tvText = itemView.findViewById(R.id.textView_option_text);
            ivActionIcon = itemView.findViewById(R.id.imageView_option_action_icon);
        }

        /**
         * 绑定数据到视图。
         * @param item     选项数据。
         * @param listener 点击监听器。
         * @param context  上下文。
         */
        void bind(final OptionItem item, final OnOptionItemClickListener listener, Context context) {
            tvText.setText(item.text);

            // 设置左侧图标 (如果提供)
            if (item.iconResId != 0) {
                ivIcon.setVisibility(View.VISIBLE);
                ivIcon.setImageResource(item.iconResId);
                // 可以根据需要设置图标颜色
                // ivIcon.setColorFilter(MaterialColors.getColor(context, com.google.android.material.R.attr.colorOnSurfaceVariant, Color.GRAY));
            } else {
                ivIcon.setVisibility(View.GONE);
            }

            // 设置右侧操作图标 (如果提供)
            if (item.actionIconResId != 0) {
                ivActionIcon.setVisibility(View.VISIBLE);
                ivActionIcon.setImageResource(item.actionIconResId);
            } else {
                ivActionIcon.setVisibility(View.GONE);
            }

            itemView.setOnClickListener(v -> {
                if (listener != null) {
                    listener.onOptionItemClick(item);
                }
            });
        }
    }
}

